/** 
 * 腾讯IM
 * @url websocket路径
 * @webSocketError 错误次数
 * @callback 回调
 * date：2020-02-05
 * author: Messi10
 * 
 */
// #ifdef H5
import TIM from 'tim-js-sdk';
// #endif
// #ifdef MP-WEIXIN
import TIM from 'tim-wx-sdk';
// #endif
import {
	IM_SDK_APPID
} from '@/common/js/config.js'
class TencentTim {
	constructor(callback) {
		this.callback = callback;
		this.instance = null;
		this.imCreate();
	}
	static getInstance() {
		if (!this.instance) {
			this.instance = new TencentTim();
		}
		return this.instance;
	}
	// im初始化
	imCreate() {
		this.instance = TIM.create({
			SDKAppID: IM_SDK_APPID // 购买的sdk秘钥
		})
	}
	// im登录，用户未登录勿调
	login(uid, userSig) {
		// tim.login({userID: 'your userID', userSig: 'your userSig'})
		// let sigObj = this.genTestUserSig(uid)
		let newObj = {
			userID: uid,
			userSig: userSig
		}
        console.log(newObj,'newObjnewObjnewObjnewObj')
		return this.instance.login(newObj)
	}
	// im退出
	logout() {
		return this.instance.logout()
	}
	// 用户登录加密秘钥
	// genTestUserSig(userID, sig) {
	// 	var SDKAPPID = IM_SDK_APPID;
	// 	var EXPIRETIME = 604800;
	// 	var SECRETKEY = sig;
	// 	// #ifdef H5
	// 	var generator = new window.LibGenerateTestUserSig(SDKAPPID, SECRETKEY, EXPIRETIME);
	// 	var userSig = generator.genTestUserSig(userID);
	// 	// #endif
	// 	// #ifdef MP-WEIXIN
	// 	var generator = new __WEBPACK_IMPORTED_MODULE_0__lib_generate_test_usersig_es_min_js__["a" /* default */ ](SDKAPPID,
	// 		SECRETKEY, EXPIRETIME);
	// 	var userSig = generator.genTestUserSig(userID);
	// 	// #endif
	// 	return {
	// 		SDKAppID: SDKAPPID,
	// 		userSig: userSig
	// 	};
	// }
	// 发送文本消息
	sendMessage(id, content) {
		// 创建文本消息
		let message = this.instance.createTextMessage({
			to: id,
			conversationType: TIM.TYPES.CONV_GROUP,
			payload: {
				text: content
			}
		})
		// console.log('sendMessage',message);
		return this.instance.sendMessage(message)
	}
	// 加入直播间 --- id直播间id
	joinGroup(id) {
		return this.instance.joinGroup({
			groupID: id
		})
	}
	// 退出直播间 --- id直播间id --- 群主解散
	quitGroup(id) {
		console.log("退出直播间 --- id直播间id --- 群主解散",id)
		return this.instance.quitGroup({
			groupID: id
		})
	}
	// 直播间聊天历史消息---没鸟用
	getConversationList() {
		return this.instance.getConversationList()
	}
	// 获取直播间成员列表
	getGroupMemberList(liveid, count = 20, offset = 0) {
		return this.instance.getGroupMemberList({
			groupID: liveid,
			count: count,
			offset: offset
		})
	}
	// 获取直播间人数
	getGroupOnlineMemberCount(liveid) {
		return this.instance.getGroupOnlineMemberCount(liveid)
	}
	// 打开某个直播间会话时，拉取消息列表---首次渲染的时候---暂无鸟用
	getMessageList(id, count = 20, nextId = '') {
		// 第一次进入
		if (nextId == '') {
			return this.instance.getMessageList({
				conversationID: id,
				count: count
			})
		} else {
			return this.instance.getMessageList({
				conversationID: id,
				count: count,
				nextReqMessageID: nextId
			})
		}
	}
	// 登录成功后会触发 SDK_READY 事件，该事件触发后，可正常使用 SDK 接口
	imReady() {
		this.instance.on(TIM.EVENT.SDK_READY, event => {
			this.callback(event)
			console.log('SDK_READY', event);
		});
	}
	// 接受推流过来的消息
	getImCustomMessageReceived() {
		this.instance.on(TIM.EVENT.MESSAGE_RECEIVED, event => {
			// console.log('getImCustomMessageReceived',event)
			this.callback(event)
		});
	}
	// 群系统通知的类型
	groupReceived() {
		this.instance.on(TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED, event => {
			this.callback(event)
			console.log(event, 'groupReceived')
		});
	}
	// 进入not ready
	getNotReady(){
		this.instance.on(TIM.EVENT.SDK_NOT_READY, event => {
			this.callback(event)
			console.log('SDK_Not_READY', event);
		  // 收到 SDK 进入 not ready 状态通知，此时 SDK 无法正常工作
		});
	}
	// 网络状态发生改变（v2.5.0 起支持）
	getNetWork(){
		this.instance.on(TIM.EVENT.NET_STATE_CHANGE, event => {
			this.callback(event)
			console.log('SDK_NetWork', event);
		  // 网络状态发生改变（v2.5.0 起支持）。
		  // event.name - TIM.EVENT.NET_STATE_CHANGE
		  // event.data.state 当前网络状态，枚举值及说明如下：
		  //   - TIM.TYPES.NET_STATE_CONNECTED - 已接入网络
		  //   - TIM.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动，SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中”
		  //   - TIM.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试，若用户网络恢复，SDK 会自动同步消息
		});
	}
	getError(){
		this.instance.on(TIM.EVENT.ERROR, event => {
			this.callback(event)
			console.log('SDK_Error', event);
		});
	}
	
	
	// // 收到自定义新消息
	// TIM.on(TIM.EVENT.IM_CUSTOM_MESSAGE_RECEIVED, event => {
	// 	console.log('IM_CUSTOM_MESSAGE_RECEIVED', event);
	// });
	// // 收到文本新消息
	// TIM.on(TIM.EVENT.IM_TEXT_MESSAGE_RECEIVED, event => {
	// 	console.log('IM_TEXT_MESSAGE_RECEIVED', event);
	// });
	// // 加入直播间
	// TIM.on(TIM.EVENT.IM_REMOTE_USER_JOIN, event => {
	// 	console.log('IM_REMOTE_USER_JOIN', event);
	// });
}
export default TencentTim;
